summaryrefslogtreecommitdiff
path: root/app/[lng]/evcp/(evcp)/(master-data)/bid-projects/page.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'app/[lng]/evcp/(evcp)/(master-data)/bid-projects/page.tsx')
-rw-r--r--app/[lng]/evcp/(evcp)/(master-data)/bid-projects/page.tsx63
1 files changed, 63 insertions, 0 deletions
diff --git a/app/[lng]/evcp/(evcp)/(master-data)/bid-projects/page.tsx b/app/[lng]/evcp/(evcp)/(master-data)/bid-projects/page.tsx
new file mode 100644
index 00000000..e98d391b
--- /dev/null
+++ b/app/[lng]/evcp/(evcp)/(master-data)/bid-projects/page.tsx
@@ -0,0 +1,63 @@
+import * as React from "react"
+import { type SearchParams } from "@/types/table"
+
+import { getValidFilters } from "@/lib/data-table"
+import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"
+import { getBidProjectLists } from "@/lib/bidding-projects/service"
+import { searchParamsBidProjectsCache } from "@/lib/bidding-projects/validation"
+import { BidProjectsTable } from "@/lib/bidding-projects/table/projects-table"
+import type { Filter } from "@/types/table"
+
+interface IndexPageProps {
+ searchParams: Promise<SearchParams>
+}
+
+export default async function IndexPage(props: IndexPageProps) {
+ const searchParams = await props.searchParams
+ const search = searchParamsBidProjectsCache.parse(searchParams)
+
+ // URL에서 프로젝트 타입 가져오기
+ const projectType = searchParams.type || "all"
+
+ // 기존 필터에 프로젝트 타입 필터 추가
+ let filters = search.filters || []
+
+ // 타입별 필터링 (전체가 아닌 경우만)
+ if (projectType !== "all") {
+ const typeFilter: Filter = {
+ id: "pjtType",
+ value: projectType,
+ type: "select",
+ operator: "eq"
+ }
+
+ // 기존 pjtType 필터가 있으면 제거하고 새로 추가
+ filters = filters.filter(f => f.id !== "pjtType")
+ filters = [...filters, typeFilter]
+ }
+
+ const validFilters = getValidFilters(filters)
+
+ const promises = Promise.all([
+ getBidProjectLists({
+ ...search,
+ filters: validFilters,
+ }),
+ ])
+
+ return (
+ <React.Suspense
+ fallback={
+ <DataTableSkeleton
+ columnCount={6}
+ searchableColumnCount={1}
+ filterableColumnCount={2}
+ cellWidths={["10rem", "40rem", "12rem", "12rem", "8rem", "8rem"]}
+ shrinkZero
+ />
+ }
+ >
+ <BidProjectsTable promises={promises} />
+ </React.Suspense>
+ )
+}